package com.wyf.vo;

import com.wyf.enums.ResponseEnum;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

/**
 * 用来向前台返回数据
 * @author wyf
 * @date 2022年07月17日 15:13
 */
@Data
@AllArgsConstructor
public class ResponseVo<T> implements Serializable {
    private Integer code;
    private String message;
    private T data;


    public ResponseVo(Integer code, String message) {
        this(code,message,null);
    }

    /**
     * 操作成功，没有返回数据，仅返回操作码，和返回信息
     * @param responseEnum
     * @return
     */
    public static ResponseVo response(ResponseEnum responseEnum) {
        return new ResponseVo(responseEnum.getCode(),responseEnum.getMessage());
    }

    /**
     * 操作成功,且返回数据
     * @param responseEnum
     * @param obj   所要返回的数据
     * @return
     */
    public static ResponseVo response(ResponseEnum responseEnum,Object obj) {
        return new ResponseVo(responseEnum.getCode(),responseEnum.getMessage(),obj);
    }

    /**
     * 直接返回成功的信息，不带数据
     * @return
     */
    public static ResponseVo success() {
        return new ResponseVo(ResponseEnum.SUCCESS.getCode(), ResponseEnum.SUCCESS.getMessage());
    }

    /**
     * 操作成功后，自定义返回信息
     * @param msg
     * @return
     */
    public static ResponseVo success(String msg) {
        return new ResponseVo(ResponseEnum.SUCCESS.getCode(), msg);
    }

    /**
     * 操作失败后，自定义返回，响应码，和什么原因操作失败
     * @param code
     * @param message
     * @return
     */
    public static ResponseVo error(Integer code, String message) {
        return new ResponseVo(code,message);
    }

    /**
     * 失败操作后，仅自定义失败信息
     * @param message
     * @return
     */
    public static ResponseVo error(String message) {
        return new ResponseVo(ResponseEnum.FAIL.getCode(), message);
    }

    /**
     * 返回一个默认的操作失败相应数据
     * @return
     */
    public static ResponseVo error() {
        return new ResponseVo(ResponseEnum.EXCEPTION.getCode(), ResponseEnum.EXCEPTION.getMessage());
    }


}
